From e9df20fb8725de25f95b5849c03a32b146f3028b Mon Sep 17 00:00:00 2001 From: parkrrrr Date: Tue, 1 Mar 2005 22:00:06 +0000 Subject: [PATCH] Update google to read output=js --- gpsbabel/google.c | 35 ++++++++++++++++++++++++++++++++- gpsbabel/reference/google.js | 2 ++ gpsbabel/reference/googmapjs.sh | 5 +++++ gpsbabel/testo | 4 ++++ gpsbabel/xmlgeneric.c | 15 +++++++++++++- gpsbabel/xmlgeneric.h | 1 + 6 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 gpsbabel/reference/google.js create mode 100644 gpsbabel/reference/googmapjs.sh diff --git a/gpsbabel/google.c b/gpsbabel/google.c index 8b99ff2b8..e5879360d 100644 --- a/gpsbabel/google.c +++ b/gpsbabel/google.c @@ -21,6 +21,7 @@ static char *encoded_points = NULL; static char *encoded_levels = NULL; +static char *script = NULL; FILE *fd; @@ -42,16 +43,32 @@ google_read(void) } #else -static xg_callback goog_points, goog_levels, goog_poly_e; +static xg_callback goog_points, goog_levels, goog_poly_e, goog_script; static xg_tag_mapping google_map[] = { { goog_points, cb_cdata, "/page/directions/polyline/points" }, { goog_levels, cb_cdata, "/page/directions/polyline/levels" }, { goog_poly_e, cb_end, "/page/directions/polyline" }, + { goog_script, cb_cdata, "/html/head/script" }, { NULL, 0, NULL } }; +void goog_script( const char *args, const char **unused ) +{ + if (args) + { + if ( script ) + { + script = xstrappend( script, args ); + } + else + { + script = xstrdup( args ); + } + } +} + void goog_points( const char *args, const char **unused ) { if (args) @@ -157,6 +174,22 @@ void google_read(void) { xml_read(); + if ( script ) + { + char *xml = strchr( script, '\'' ); + char *end = NULL; + if ( xml ) { + xml++; + end = strrchr( xml, '\'' ); + if ( end ) { + *end = '\0'; + xml_deinit(); + xml_init( NULL, google_map ); + xml_readstring( xml ); + } + } + xfree( script ); + } } #endif diff --git a/gpsbabel/reference/google.js b/gpsbabel/reference/google.js new file mode 100644 index 000000000..de2e30b71 --- /dev/null +++ b/gpsbabel/reference/google.js @@ -0,0 +1,2 @@ +Google Maps - 233 S. Wacker, Chicago, IL to 1060 W. Addison, Chicago, IL \ No newline at end of file diff --git a/gpsbabel/reference/googmapjs.sh b/gpsbabel/reference/googmapjs.sh new file mode 100644 index 000000000..6ce53183b --- /dev/null +++ b/gpsbabel/reference/googmapjs.sh @@ -0,0 +1,5 @@ + +FROM="233 S. Wacker, Chicago, IL" +TO="1060 W. Addison, Chicago, IL" +wget -O - "http://maps.google.com/maps?q=$FROM to $TO&output=js" 2>/dev/null + diff --git a/gpsbabel/testo b/gpsbabel/testo index c1c154d9a..fa01bc0f1 100755 --- a/gpsbabel/testo +++ b/gpsbabel/testo @@ -575,6 +575,10 @@ rm -f ${TMPDIR}/google.out ${PNAME} -i google -f reference/google.xml -o arc -F ${TMPDIR}/google.out compare ${TMPDIR}/google.out reference/google.arc +rm -f ${TMPDIR}/google.out +${PNAME} -i google -f reference/google.js -o arc -F ${TMPDIR}/google.out +compare ${TMPDIR}/google.out reference/google.arc + # # XCSV "human readable" tests # diff --git a/gpsbabel/xmlgeneric.c b/gpsbabel/xmlgeneric.c index 37dd183fe..9aaf23173 100644 --- a/gpsbabel/xmlgeneric.c +++ b/gpsbabel/xmlgeneric.c @@ -220,10 +220,23 @@ void xml_read(void) } +void xml_readstring( char *str ) +{ + int len = strlen(str); + if (!XML_Parse(psr, str, len, 1)) { + fatal( MYNAME ":Parse error at %d: %s\n", + XML_GetCurrentLineNumber(psr), + XML_ErrorString(XML_GetErrorCode(psr))); + } + XML_ParserFree(psr); +} + void xml_init(const char *fname, xg_tag_mapping *tbl) { - ifd = xfopen(fname, "r", MYNAME); + if (fname) { + ifd = xfopen(fname, "r", MYNAME); + } current_tag = vmem_alloc(1,0); *((char *)current_tag.mem) = '\0'; diff --git a/gpsbabel/xmlgeneric.h b/gpsbabel/xmlgeneric.h index e1e00d1ff..ec66ae0d3 100644 --- a/gpsbabel/xmlgeneric.h +++ b/gpsbabel/xmlgeneric.h @@ -45,4 +45,5 @@ void xml_write_time(FILE *ofd, const time_t timep, char *elname); void xml_init(const char *fname, xg_tag_mapping *tbl); void xml_read(void); +void xml_readstring(char *str); void xml_deinit(void); -- 2.30.2